home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / python2.5 / lib-tk / tkSimpleDialog.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-29  |  9KB  |  277 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. '''Dialog boxes
  5.  
  6. This module handles dialog boxes. It contains the following
  7. public symbols:
  8.  
  9. Dialog -- a base class for dialogs
  10.  
  11. askinteger -- get an integer from the user
  12.  
  13. askfloat -- get a float from the user
  14.  
  15. askstring -- get a string from the user
  16. '''
  17. from Tkinter import *
  18. import os
  19.  
  20. class Dialog(Toplevel):
  21.     '''Class to open dialogs.
  22.  
  23.     This class is intended as a base class for custom dialogs
  24.     '''
  25.     
  26.     def __init__(self, parent, title = None):
  27.         '''Initialize a dialog.
  28.  
  29.         Arguments:
  30.  
  31.             parent -- a parent window (the application window)
  32.  
  33.             title -- the dialog title
  34.         '''
  35.         Toplevel.__init__(self, parent)
  36.         if parent.winfo_viewable():
  37.             self.transient(parent)
  38.         
  39.         if title:
  40.             self.title(title)
  41.         
  42.         self.parent = parent
  43.         self.result = None
  44.         body = Frame(self)
  45.         self.initial_focus = self.body(body)
  46.         body.pack(padx = 5, pady = 5)
  47.         self.buttonbox()
  48.         self.wait_visibility()
  49.         self.grab_set()
  50.         if not self.initial_focus:
  51.             self.initial_focus = self
  52.         
  53.         self.protocol('WM_DELETE_WINDOW', self.cancel)
  54.         if self.parent is not None:
  55.             self.geometry('+%d+%d' % (parent.winfo_rootx() + 50, parent.winfo_rooty() + 50))
  56.         
  57.         self.initial_focus.focus_set()
  58.         self.wait_window(self)
  59.  
  60.     
  61.     def destroy(self):
  62.         '''Destroy the window'''
  63.         self.initial_focus = None
  64.         Toplevel.destroy(self)
  65.  
  66.     
  67.     def body(self, master):
  68.         '''create dialog body.
  69.  
  70.         return widget that should have initial focus.
  71.         This method should be overridden, and is called
  72.         by the __init__ method.
  73.         '''
  74.         pass
  75.  
  76.     
  77.     def buttonbox(self):
  78.         '''add standard button box.
  79.  
  80.         override if you do not want the standard buttons
  81.         '''
  82.         box = Frame(self)
  83.         w = Button(box, text = 'OK', width = 10, command = self.ok, default = ACTIVE)
  84.         w.pack(side = LEFT, padx = 5, pady = 5)
  85.         w = Button(box, text = 'Cancel', width = 10, command = self.cancel)
  86.         w.pack(side = LEFT, padx = 5, pady = 5)
  87.         self.bind('<Return>', self.ok)
  88.         self.bind('<Escape>', self.cancel)
  89.         box.pack()
  90.  
  91.     
  92.     def ok(self, event = None):
  93.         if not self.validate():
  94.             self.initial_focus.focus_set()
  95.             return None
  96.         
  97.         self.withdraw()
  98.         self.update_idletasks()
  99.         
  100.         try:
  101.             self.apply()
  102.         finally:
  103.             self.cancel()
  104.  
  105.  
  106.     
  107.     def cancel(self, event = None):
  108.         if self.parent is not None:
  109.             self.parent.focus_set()
  110.         
  111.         self.destroy()
  112.  
  113.     
  114.     def validate(self):
  115.         '''validate the data
  116.  
  117.         This method is called automatically to validate the data before the
  118.         dialog is destroyed. By default, it always validates OK.
  119.         '''
  120.         return 1
  121.  
  122.     
  123.     def apply(self):
  124.         '''process the data
  125.  
  126.         This method is called automatically to process the data, *after*
  127.         the dialog is destroyed. By default, it does nothing.
  128.         '''
  129.         pass
  130.  
  131.  
  132.  
  133. class _QueryDialog(Dialog):
  134.     
  135.     def __init__(self, title, prompt, initialvalue = None, minvalue = None, maxvalue = None, parent = None):
  136.         if not parent:
  137.             import Tkinter as Tkinter
  138.             parent = Tkinter._default_root
  139.         
  140.         self.prompt = prompt
  141.         self.minvalue = minvalue
  142.         self.maxvalue = maxvalue
  143.         self.initialvalue = initialvalue
  144.         Dialog.__init__(self, parent, title)
  145.  
  146.     
  147.     def destroy(self):
  148.         self.entry = None
  149.         Dialog.destroy(self)
  150.  
  151.     
  152.     def body(self, master):
  153.         w = Label(master, text = self.prompt, justify = LEFT)
  154.         w.grid(row = 0, padx = 5, sticky = W)
  155.         self.entry = Entry(master, name = 'entry')
  156.         self.entry.grid(row = 1, padx = 5, sticky = W + E)
  157.         if self.initialvalue:
  158.             self.entry.insert(0, self.initialvalue)
  159.             self.entry.select_range(0, END)
  160.         
  161.         return self.entry
  162.  
  163.     
  164.     def validate(self):
  165.         import tkMessageBox as tkMessageBox
  166.         
  167.         try:
  168.             result = self.getresult()
  169.         except ValueError:
  170.             tkMessageBox.showwarning('Illegal value', self.errormessage + '\nPlease try again', parent = self)
  171.             return 0
  172.  
  173.         if self.minvalue is not None and result < self.minvalue:
  174.             tkMessageBox.showwarning('Too small', 'The allowed minimum value is %s. Please try again.' % self.minvalue, parent = self)
  175.             return 0
  176.         
  177.         if self.maxvalue is not None and result > self.maxvalue:
  178.             tkMessageBox.showwarning('Too large', 'The allowed maximum value is %s. Please try again.' % self.maxvalue, parent = self)
  179.             return 0
  180.         
  181.         self.result = result
  182.         return 1
  183.  
  184.  
  185.  
  186. class _QueryInteger(_QueryDialog):
  187.     errormessage = 'Not an integer.'
  188.     
  189.     def getresult(self):
  190.         return int(self.entry.get())
  191.  
  192.  
  193.  
  194. def askinteger(title, prompt, **kw):
  195.     '''get an integer from the user
  196.  
  197.     Arguments:
  198.  
  199.         title -- the dialog title
  200.         prompt -- the label text
  201.         **kw -- see SimpleDialog class
  202.  
  203.     Return value is an integer
  204.     '''
  205.     d = _QueryInteger(title, prompt, **kw)
  206.     return d.result
  207.  
  208.  
  209. class _QueryFloat(_QueryDialog):
  210.     errormessage = 'Not a floating point value.'
  211.     
  212.     def getresult(self):
  213.         return float(self.entry.get())
  214.  
  215.  
  216.  
  217. def askfloat(title, prompt, **kw):
  218.     '''get a float from the user
  219.  
  220.     Arguments:
  221.  
  222.         title -- the dialog title
  223.         prompt -- the label text
  224.         **kw -- see SimpleDialog class
  225.  
  226.     Return value is a float
  227.     '''
  228.     d = _QueryFloat(title, prompt, **kw)
  229.     return d.result
  230.  
  231.  
  232. class _QueryString(_QueryDialog):
  233.     
  234.     def __init__(self, *args, **kw):
  235.         if kw.has_key('show'):
  236.             self._QueryString__show = kw['show']
  237.             del kw['show']
  238.         else:
  239.             self._QueryString__show = None
  240.         _QueryDialog.__init__(self, *args, **kw)
  241.  
  242.     
  243.     def body(self, master):
  244.         entry = _QueryDialog.body(self, master)
  245.         if self._QueryString__show is not None:
  246.             entry.configure(show = self._QueryString__show)
  247.         
  248.         return entry
  249.  
  250.     
  251.     def getresult(self):
  252.         return self.entry.get()
  253.  
  254.  
  255.  
  256. def askstring(title, prompt, **kw):
  257.     '''get a string from the user
  258.  
  259.     Arguments:
  260.  
  261.         title -- the dialog title
  262.         prompt -- the label text
  263.         **kw -- see SimpleDialog class
  264.  
  265.     Return value is a string
  266.     '''
  267.     d = _QueryString(title, prompt, **kw)
  268.     return d.result
  269.  
  270. if __name__ == '__main__':
  271.     root = Tk()
  272.     root.update()
  273.     print askinteger('Spam', 'Egg count', initialvalue = 144)
  274.     print askfloat('Spam', 'Egg weight\n(in tons)', minvalue = 1, maxvalue = 100)
  275.     print askstring('Spam', 'Egg label')
  276.  
  277.